package tp.pr5.mv;

import java.util.Scanner;

import tp.pr5.mv.command.Command;

    // Controlador del modo interactivo.

public class ControllerInteractive extends Controller {

	private Command[] commandSet;   // Array de comandos que usaremos al leer y parsear de consola.
	private Scanner sc;
	
	public ControllerInteractive(CPU cpu, Scanner sc) {
		commandSet = Command.getCommandSet();
		this.cpu = cpu;
		this.sc = sc;
	}
	

	@Override
	public void requestRun() { // Petición de ejecutar el método run de la CPU
		cpu.run();
	}

	public void execute() {
		
		// Al ejecutar vamos leyendo los comandos de la consola, los parseamos y los ejecutamos.
		
		Command c = null;
		String line = null;
	
		while ( !cpu.isHalted() ) { // El programa se ejecutará mientras la MV no esté parada
			
			
			System.out.print( "> ");
			line = sc.nextLine(); // Tomamos la linea escrita por el usuario
			
			
			for ( Command o : commandSet ) { // Recorremos el array de comandos hasta encontrar el que hemos introducido 
				c = o.parse(line);
				if ( c!= null) break;
			}
			
			if ( c != null ) { // Si el comando que hemos ejecutado se ha parseado correctamente, entonces lo ejecutamos
				c.executeCommand(cpu.getMemory(), cpu.getOperandStack(), cpu.getPCObject() , cpu);
			}
			else 
				System.out.println("No te entiendo.");
			
		}
		
	}

	@Override
	public void requestPause() {
		// TODO Auto-generated method stub
		
	}

}
